home *** CD-ROM | disk | FTP | other *** search
- page ,132
-
- ; masm tisr ; >err
- .286p
- .xlist
- include bogus.inc
- include pic.h
- .list
-
- WM_COMMAND = 0111h
-
- EXTRN POSTMESSAGE:FAR
-
- Words struc
- LoWord dw ?
- HiWord dw ?
- Words ends
-
- ;
- ; Set variables for our interrupt number
- ;
- ife (FAKE_IRQ GE 8)
- INT_DEV equ (INT_MASTER_0+(FAKE_IRQ AND 7))
- PIC00 equ INTA00
- PIC01 equ INTA01
- else
- INT_DEV equ (INT_SLAVE_0+(FAKE_IRQ AND 7))
- INT_MASK equ 1 SHL (FAKE_IRQ AND 7)
- PIC00 equ INTB00
- PIC01 equ INTB01
- endif
-
- page
-
- FIXED_DATA SEGMENT DWORD PUBLIC 'DATA'
- PUBLIC _hWndEvent,_wParamEvent,_wCount
-
- _hWndEvent label word
- hWndEvent dw 0 ; Window to post events to
-
- _wParamEvent label word
- wParamEvent dw 0 ; wParam value to post
-
- _wCount label word
- wCount dw 0 ; count of unprocessed interrupts
-
- FIXED_DATA ENDS
-
- page
-
- ;IP IntSvcRtn - The Interrupt Service Routine
- ;
- ; WARNINGS
- ;
- ; NOTES
- ; This ISR increments a count and re-arms the device.
- ; If the count was previously zero, a message is posted.
- ;
- ; If the "fStopping" flag is set, the device is not re-armed.
- ;
-
- FIXED_TEXT SEGMENT PARA PUBLIC 'CODE'
- selData1 dw FIXED_DATA
- assume CS:FIXED_TEXT,DS:NOTHING
- PUBLIC _IntSvcRtn
- _IntSvcRtn label far
- IntSvcRtn proc far
- push ax
- push dx
- push ds
- mov ds,selData1
- assume ds:FIXED_DATA
- inc wCount
- mov al,NOT FAKE_CTL_EOI
- mov dx,FAKE_PORT
- out dx,al ; send EOI to device
- mov al,EOI
- out PIC00,al ; send EOI to PIC
- ife (PIC00 EQ INTA00)
- out INTA00,al ; send EOI to master PIC, too
- endif
- cmp hWndEvent,0 ; exiting?
- jz isr9 ; if so, then don't restart or post
- cmp wCount,1 ; Need to post?
- jne isr8 ; skip if not
-
- push bx ; save the remaining registers
- push cx
- push es
-
- push hWndEvent
- push WM_COMMAND
- push wParamEvent
- push 0 ; lParam is zero
- push 0
- call POSTMESSAGE ; post the event
-
- pop es
- pop cx
- pop bx
-
- isr8:
- mov al,NOT FAKE_CTL_START
- mov dx,FAKE_PORT
- out dx,al ; restart I/O
- isr9:
- pop ds
- assume ds:NOTHING
- pop dx
- pop ax
- iret
- IntSvcRtn endp
-
-
- ; Needed by AllocIntReflector
- PUBLIC _BogusCallback
- _BogusCallback label far
- BogusCallback proc far
- pushf
- call IntSvcRtn
- ret
- BogusCallback endp
-
- FIXED_TEXT ENDS
-
-
- end
-